

/**
 * popup.js 「ニコニコ実況サポーター」
 * popup関連の処理を行うjsファイル
 * @author winter.daydreams@gmail.com (satmat twitter: satellitesat)
 */
var SATMAT_NICOJK = SATMAT_NICOJK || {};


/**
 * 名前空間の生成
 */
SATMAT_NICOJK.namespace('SATMAT_NICOJK.popup');
SATMAT_NICOJK.popup = (function() {
  'use strict';
  var url                   = 'http://jk.nicovideo.jp/',
      xhr                   = new XMLHttpRequest(),
      _requestNikojkSummary = function(){},
      _receiveNicojkSummary = function(){},
      _addTargetBlank       = function(){},
      _copyLinkTag          = function(){},
      _convImgHrefRel2Abs   = function(){};
    
    
    _addTargetBlank = function( doc ){
        var len  = 0,
            n    = 0,
            aary = [];
        
        aary = doc.getElementsByTagName("a");
        len = aary.length;
        
        for( n = 0; n < len; n++ ){
            aary[n].setAttribute("target", "_blank");
            aary[n].href = aary[n].href.toString();
        }
        
        return doc;
    };
    
    
    _convImgHrefRel2Abs = function( doc ){
        var len  = 0,
            n    = 0,
            iary = [],
            node = {};

        iary = doc.getElementsByTagName("img");
        len  = iary.length;

        for( n = 0; n < len; n++ ){
            node = iary[n];

            // toString()すると勝手に絶対パスになるようだ？
            node.src = node.src.toString();
        }
        
    };
    
    
    /* d1からd2にCSSのLink要素をコピーする */
    _copyLinkTag = function( d1, d2 ){
        var len  = 0,
            n    = 0,
            lary = [],
            node = {};
        
        lary = d1.getElementsByTagName("link");
        len  = lary.length;
        
        for( n = 0; n < len; n++ ){
            if( ( ! ("type" in lary[n] ) ) || 
                ( lary[n].type !== "text/css" ) ){
                continue;
            }
            
            // cloneNode() しないとd1から消えてしまう
            node = lary[n].cloneNode(true);

            // 相対パスを絶対パスに変換
            // @todo もともと絶対パスで記述されている場合の処理
            node.href = node.baseURI + node.href;
            
            d2.head.appendChild( node );

        }
        
    };

    _receiveNicojkSummary = function( evt ){
        var doc = {};

        if( ( xhr.readyState === XMLHttpRequest.DONE ) &&
            ( xhr.status === 200 ) )
        {
            doc = xhr.response;

            /* 受信document a要素のtarget属性に"_target"追加 */
            _addTargetBlank( doc );

            /* 受信documentからwindow.documentにLink要素をコピー(CSS) */
            _copyLinkTag( doc, window.document );

            /* img要素のsrcを絶対パスに変換 */
            _convImgHrefRel2Abs( doc );

            /* div id="ch" を取得 */
            document.getElementById("currentepg").innerHTML = doc.getElementById("ch").innerHTML;
            document.getElementById("currentepg").style.display = "block";

        }

    };

    /**
     * ニコニコ実況のトップページを取得する。
     */
    _requestNikojkSummary = function( evt ){
        xhr.open("GET", url, true);
        xhr.responseType = "document";
        xhr.send();
        xhr.onreadystatechange = _receiveNicojkSummary;
    };

    return {
        requestNikojkSummary: _requestNikojkSummary
    };

}());


(
    function(){
        window.addEventListener( "load", SATMAT_NICOJK.popup.requestNikojkSummary );
    }()
);
